package com.hb.C_Lambda表达式和集合.高阶函数.operator_objects


/**
 * 首先let()的定义是这样的，
默认当前这个对象作为闭包的it参数，返回值是函数里面最后一行，或者指定return
 */
fun main() {
    println(testLet())

    println("-------")
    val person = findPerson()
    //太麻烦了，现在我想这样，如果person，不为空的话，我就打印出他的属性或者方法，不需要每次去判断
    println(person?.name)
    println(person?.age)
    println("-------")

    findPerson()?.let {
        println(it.name)
        println(it.age)
        it.hello()
    }

    println("-------")
    //apply的使用
    findPerson()?.apply {
        println(name)
        println(age)
        hello()
    }
}
fun testLet(): Int {
    // fun <T, R> T.let(f: (T) -> R): R { f(this)}
    "testLet".let {
        println(it)
        println(it)
        println(it)
        return 1
    }
}

data class Person(val name:String,val age:Int){
    fun hello(){
        println("name : $name,age: $age")
    }
}

fun findPerson():Person?{
    return Person("java",10)
}

